/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CONTROLES;

import INTERFAZ.permisosSuperUsu;
import MODELOS.Usuario;
import UTILITARIOS.EncriptarCadena;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Administrador
 */
public class ControlUsuario {

  

    public void guardarUsuario(Usuario u) {
        Conexion conection = new Conexion();

        try {
            String cad = new EncriptarCadena().Encriptar("nfn inversiones", u.getToken(), true);
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
              conectado.prepareStatement("INSERT INTO USUARIO(id_usuario,id_empleado,nombre_usu,contrasena,tipo_usuario,fecha_creacion,estado_usu, permiso, token)VALUES "+ "(nextval('usuario_id_usuario_seq'),'"+u.getIdEmpleado()+"','"+u.getNombreUsuario().toUpperCase()+"',md5('"+u.getContrasena()+"'),'"+u.getTipoUsuario().toUpperCase()+"','"+u.getFechaCreacion()+"','"+u.isEstado()+"','"+u.getPermiso()+"', '"+cad+"')");

            ps.executeUpdate();
            ps.close();
    } catch (SQLException em) {
            System.out.println("error al insertar el Usuario "+em.getLocalizedMessage() );

    }
  }

    public Usuario getUsuarioNombre(String nombre) {
        Conexion conection = new Conexion();
        Usuario usuario = new Usuario();
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from USUARIO where nombre_usu ='"+nombre+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                usuario.setIdUsuario(respA.getInt(1));
                usuario.setIdEmpleado(respA.getInt(2));
                usuario.setNombreUsuario(respA.getString(3));
                usuario.setContrasena(respA.getString(4));
                usuario.setTipoUsuario(respA.getString(5));
                usuario.setFechaCreacion(respA.getDate(6));
                usuario.setEstado(respA.getBoolean(7));
                usuario.setPermiso(respA.getBoolean(8));
                String cad = new EncriptarCadena().Encriptar("nfn inversiones", respA.getString(9), false);
                usuario.setToken(cad);

            }

        } catch (SQLException ex) {
            System.out.println("Error buscar usuario por su nombre : "+ex.getLocalizedMessage());
        }
    return usuario;
    }

    public Usuario getUsuarioId(int idEmpleado) {
        System.out.println("entro el id : "+idEmpleado);
        Conexion conection = new Conexion();
        Usuario usuario = new Usuario();
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from USUARIO where id_empleado ='"+idEmpleado+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                usuario.setIdUsuario(respA.getInt(1));
                usuario.setIdEmpleado(respA.getInt(2));
                usuario.setNombreUsuario(respA.getString(3));
                usuario.setContrasena(respA.getString(4));
                usuario.setTipoUsuario(respA.getString(5));
                usuario.setFechaCreacion(respA.getDate(6));
                usuario.setEstado(respA.getBoolean(7));
                usuario.setPermiso(respA.getBoolean(8));
                String cad = new EncriptarCadena().Encriptar("nfn inversiones", respA.getString(9), false);
                usuario.setToken(cad);

            }
            System.out.println("Xczxcz"+usuario.getToken()+"   "+usuario.getIdUsuario());

        } catch (SQLException ex) {
            System.out.println("Error buscar usuario por su id : "+ex.getLocalizedMessage());
        }
    return usuario;
    }

    public Usuario getUsuarioPermiso(int idEmpleado) {
        System.out.println("entro el id : "+idEmpleado);
        Conexion conection = new Conexion();
        Usuario usuario = new Usuario();
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from USUARIO where id_usuario ='"+idEmpleado+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                usuario.setIdUsuario(respA.getInt(1));
                usuario.setIdEmpleado(respA.getInt(2));
                usuario.setNombreUsuario(respA.getString(3));
                usuario.setContrasena(respA.getString(4));
                usuario.setTipoUsuario(respA.getString(5));
                usuario.setFechaCreacion(respA.getDate(6));
                usuario.setEstado(respA.getBoolean(7));
                usuario.setPermiso(respA.getBoolean(8));
                String cad = new EncriptarCadena().Encriptar("nfn inversiones", respA.getString(9), false);
                usuario.setToken(cad);

            }
            System.out.println("Xczxcz"+usuario.getToken()+"   "+usuario.getIdUsuario());

        } catch (SQLException ex) {
            System.out.println("Error buscar usuario por su id : "+ex.getLocalizedMessage());
        }
    return usuario;
    }

    public boolean esUsuario(int idEmpleado)
    {
        boolean res = false;
        
        Conexion conection = new Conexion();
       
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from USUARIO where id_empleado ='"+idEmpleado+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                res = true;
            }

        } catch (SQLException ex) {
            res=false;
            System.out.println("Error buscar usuario : "+ex.getLocalizedMessage());
        }

        return res;
    }

    public void actualizarUsuario(Usuario e) {
        Conexion conection = new Conexion();
        System.out.println("tipo en actualizar "+e.getTipoUsuario());
        System.out.println("contraseña "+e.getContrasena());
        System.out.println("id en actualizar"+e.getIdUsuario());
        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("UPDATE usuario SET id_usuario='"+e.getIdUsuario()+"', id_empleado='"+e.getIdEmpleado()+"',nombre_usu='"+e.getNombreUsuario()+"',contrasena=md5('"+e.getContrasena()+"'),tipo_usuario='"+e.getTipoUsuario()+"',fecha_creacion='"+e.getFechaCreacion()+"',estado_usu='"+e.isEstado()+"' WHERE id_usuario = '"+e.getIdUsuario()+"';");


            ps.executeUpdate();
            ps.close();
    } catch (SQLException em) {

            System.out.println("error al actualizar al usuario "+em.getLocalizedMessage() );

    }

  }

     public void actualizarPermiso(Usuario e) {
        Conexion conection = new Conexion();

        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("UPDATE usuario SET permiso='"+e.getPermiso()+"' WHERE id_usuario = '"+e.getIdUsuario()+"';");


            ps.executeUpdate();
            ps.close();
    } catch (SQLException em) {

            System.out.println("error al actualizar los permisos usuario "+em.getLocalizedMessage() );

    }

  }

     public void habilitarSuperUsuario(permisosSuperUsu s,Usuario e) {
        Conexion conection = new Conexion();
        String token = new EncriptarCadena().Encriptar("nfn inversiones", "INGRESAR", true);
        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("UPDATE usuario SET permiso='"+e.getPermiso()+"', token ='"+token+"' WHERE id_usuario = '"+e.getIdUsuario()+"';");


            ps.executeUpdate();
            ps.close();
            JOptionPane.showMessageDialog(s, "Los permisos se asignaron CORRECTAMENTE ", "Confirmación", JOptionPane.INFORMATION_MESSAGE);
    } catch (SQLException em) {
            System.out.println("error al habilitar los permisos superusuario "+em.getLocalizedMessage() );
           JOptionPane.showMessageDialog(s, "Se produjo un error en la asignación de PERMISOS ", "Advertencia", JOptionPane.ERROR_MESSAGE);
    }
        

  }

     public void deshabilitarSuperUsuario(permisosSuperUsu s,Usuario e) {
        Conexion conection = new Conexion();
        String token = new EncriptarCadena().Encriptar("nfn inversiones", "NOINGRESAR", true);
        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("UPDATE usuario SET permiso='"+e.getPermiso()+"', token ='"+token+"' WHERE id_usuario = '"+e.getIdUsuario()+"';");


            ps.executeUpdate();
            ps.close();
            JOptionPane.showMessageDialog(s, "Los permisos se asignaron CORRECTAMENTE ", "Confirmación", JOptionPane.INFORMATION_MESSAGE);
    } catch (SQLException em) {
            System.out.println("error al desahibilitar los permisos superusuario "+em.getLocalizedMessage() );
            JOptionPane.showMessageDialog(s, "Se produjo un error en la asignación de PERMISOS ", "Advertencia", JOptionPane.ERROR_MESSAGE);
    }
      

  }
//    public String[] nombresEmp()
//    {
//        String lista[]=new String[getEmpleados().size()];
//
//         ControlEmpleado c = new ControlEmpleado();
//
//        for(int i=0; i<c.getListaEmp().size(); i++ )
//
//        lista[i]=c.getListaEmp().get(i).getIdEmpleado()+"-"+c.getListaEmp().get(i).getNombreEmpleado().toString()+" "+c.getListaEmp().get(i).getApellidoEmp().toString()+" "+c.getListaEmp().get(i);
//
//
//    return lista;
//
//    }

    public String [] getUsuarios(int idsucursal){
       Conexion conection = new Conexion();
       ArrayList<String[]> r = new ArrayList< String[]>();
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select u.id_usuario, e.nombre_empleado, e.apellido_emp from empleado AS e, usuario AS u WHERE e.id_empleado = u.id_empleado AND e.id_sucursal = '"+idsucursal+"' ORDER BY e.nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                String [] a = new String[3];
                a[0] = respEmp.getString(1);
                a[1] = respEmp.getString(2);
                a[2] = respEmp.getString(3);
                r.add(a);
            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de Usuarios " + e.getLocalizedMessage());
        }
        String lista[]=new String[r.size()];
        for(int i=0; i<r.size(); i++ )
            lista[i]=r.get(i)[0]+"-"+r.get(i)[1]+" "+r.get(i)[2];
        return lista;
    }
/*
    public ArrayList<Usuario> getUsuarioSucursal(int idSucursal){
       Conexion conection = new Conexion();
       ArrayList<Usuario> res = new ArrayList<Usuario>();
       Usuario emplea;
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from empleado where id_sucursal='"+idSucursal+"' ORDER BY nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){

                emplea= new Empleado();
                emplea.setIdEmpleado(respEmp.getInt(1));
                emplea.setIdSucursal(respEmp.getInt(2));
                emplea.setNombreEmpleado(respEmp.getString(3));
                emplea.setApellidoEmp(respEmp.getString(4));
                emplea.setCiudadEmp(respEmp.getString(5));
                emplea.setCelularEmp(respEmp.getInt(6));
                emplea.setTelefonoEmp(respEmp.getInt(7));
                emplea.setNitEmp(respEmp.getInt(8));
                emplea.setGeneroEmp(respEmp.getString(9));
                emplea.setFechaNacimiento(respEmp.getDate(10));
                emplea.setDireccionEmp(respEmp.getString(11));
                emplea.setEstadoEmp(respEmp.getBoolean(12));
                emplea.setEmailEmp(respEmp.getString(13));
                emplea.setIdEmpleo(respEmp.getInt(14));


                res.add(emplea);

            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de empleados de cada sucursal " + e.getLocalizedMessage());
        }

        return res;
        }
*/


}
